package com.example.java_gobang.game;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

//该类维护在线用户信息，需要保证线程安全
//针对用户多开问题，即一个用户多个浏览器登录账号，那么该哈希中会插入失败，因为userId是一样的，那么如果直接插入，
//后续的session会覆盖，我们的程序应该不允许多开问题
@Component
public class OnlineUserManager {
    //用户id与session的映射，这个哈希表表示游戏大厅用户的在线情况
    private ConcurrentHashMap<Integer, WebSocketSession> gameHall = new ConcurrentHashMap<>();

    //这个哈希表表示游戏房间用户的在线情况，这是因为当前端页面跳转时，gameHall中会删除对应信息，逻辑在MatchAPI中写明
    private ConcurrentHashMap<Integer, WebSocketSession> gameRoom = new ConcurrentHashMap<>();

    public void enterGameHall(int userId, WebSocketSession webSocketSession){
        gameHall.put(userId, webSocketSession);
    }

    public void existGameHall(int userid){
        gameHall.remove(userid);
    }

    public WebSocketSession getFromGameHall(int userid){
        return gameHall.get(userid);
    }

    public void enterGameRoom(int userId, WebSocketSession webSocketSession){
        gameRoom.put(userId, webSocketSession);
    }

    public void existGameRoom(int userid){
        gameRoom.remove(userid);
    }

    public WebSocketSession getFromGameRoom(int userid){
        return gameRoom.get(userid);
    }


}
